package common;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import javax.naming.NamingException;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import justep.SimpleFileStore;
//
//import me.chanjar.weixin.common.util.http.Utf8ResponseHandler;
//
//import org.apache.http.Consts;
//import org.apache.http.client.ClientProtocolException;
//import org.apache.http.client.config.RequestConfig;
//import org.apache.http.client.methods.CloseableHttpResponse;
//import org.apache.http.client.methods.HttpPost;
//import org.apache.http.entity.StringEntity;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClients;
//import org.nutz.http.Header;
//import org.nutz.http.Http;
//import org.nutz.http.Request;
//import org.nutz.http.Request.METHOD;
//import org.nutz.http.Response;
//import org.nutz.http.Sender;
//import org.nutz.json.Json;
//import org.nutz.json.JsonFormat;
//import org.nutz.lang.Encoding;
//import org.nutz.lang.Lang;
//import org.nutz.lang.Streams;
//
//import com.alibaba.fastjson.JSONObject;
//import com.justep.baas.action.ActionContext;

public class HisApp {
//	private static int count = 15;
//	
//	/**
//	 * 叫号？
//	 */
//	public static JSONObject say(JSONObject params, ActionContext context) throws SQLException, NamingException, ClientProtocolException, IOException, Exception {
//		String name = params.getString("name");
//		HttpServletRequest req = (HttpServletRequest)context.get(ActionContext.REQUEST);
//		String ip = req.getRemoteAddr();
//		System.out.println("remoteAddr = " + ip);
//		//System.out.println("=====================" + name);
//		if(count>0) count--;
//		else count = 15;
//		JSONObject ret = new JSONObject();
//		ret.put("say", "您好：" +  name + ",您的当前号为 " + count + " 号");
//		ret.put("nowCount", count);
//		Thread.sleep(5000);
//		return ret;
//	}
//	
//	/**
//	 * BaiDuAi操作
//	 * @param params
//	 * @param context
//	 * @return
//	 * @throws SQLException
//	 * @throws NamingException
//	 * @throws ClientProtocolException
//	 * @throws IOException
//	 * @throws Exception
//	 */
//	public static JSONObject aiInvoke(JSONObject params, ActionContext context) throws SQLException, NamingException, ClientProtocolException, IOException, Exception {
//		String tradeJson = params.getString("tradeJson");
//		Map tMap = (Map)Json.fromJson(tradeJson);
//		String name = (String)tMap.get("fileName");
//		String filePath = SimpleFileStore.docStorePath + File.separator +"0" + File.separator  + name;
//		System.out.println("filePath="+filePath);
//		String str = BaiDuAi.idCardPicScan(filePath);
//		JSONObject ret = JSONObject.parseObject(str);
//		return ret;
//	}
//	
//	
//	
//	/**
//	 * 连接后台服务
//	 * @param params
//	 * @param context
//	 * @return
//	 * @throws SQLException
//	 * @throws NamingException
//	 * @throws ClientProtocolException
//	 * @throws IOException
//	 */
//	public static JSONObject exchangeToP(JSONObject params, ActionContext context) throws SQLException, NamingException, ClientProtocolException, IOException {
//		String tradeJson = params.getString("tradeJson");
//		// 加入签名
//		Map tMap = (Map) Json.fromJson(tradeJson);
//		String tradeType = (String)tMap.get("tradeType");	// 交易类型
//		Map tradeParamMp = (Map) tMap.get("tradeParam");	// 交易内容
//		String tradeParamsStr = Json.toJson(tradeParamMp, JsonFormat.tidy()).replaceAll("\\}\\, \\{", "\\}\\,\\{");
//		System.out.println(tradeParamsStr);
//		
//		String sign = MD5.MD5Encode(tradeParamsStr+""+HisConfig.HIS_MD5KEY);
//		tMap.put("sign", sign);
//		//tMap.put("tradeParam", tradeParamsStr);
//		
//		String hisGateWayUrl = (String) tMap.get("HisGateWay"); // 动态知道访问地址
//		if("".equals(hisGateWayUrl) || hisGateWayUrl==null) hisGateWayUrl = HisConfig.HisGateWayUrl;
//		tMap.remove("HisGateWay");
//		
//		String appGateWayUrl = (String) tMap.get("AppGateWay"); // 动态知道访问地址
//		if("".equals(appGateWayUrl) || appGateWayUrl==null) appGateWayUrl = HisConfig.AppGateWayUrl;
//		tMap.remove("AppGateWay");
//		
//		// 重新组报文 加了一个sign
//		tradeJson = Json.toJson(tMap);
//		try {
//			HisConfig.Log_His.info("GEIT网关请求:\r\n" + tradeJson);
//			String retStr = "";
//			
//			if("A".equals(tradeType.substring(0, 1))) {
//				retStr =  httpPostWithoutParam(tradeJson, appGateWayUrl, HisConfig.AppGateWayTimeout);
//			}
//			else if("H".equals(tradeType.substring(0, 1))){
//				retStr =  httpPostWithoutParam(tradeJson, hisGateWayUrl, HisConfig.HisGateWayTimeout);
//			}
//			
//			HisConfig.Log_His.info("GEIT网关返回:\r\n" + retStr);
//			System.out.println(retStr);
//			if("".equals(retStr)) throw new Exception("返回数据为空字符串");
//			
//			JSONObject ret = JSONObject.parseObject(retStr);
//			return ret;
//		} catch (Exception e) {
//			// TODO: handle exception
//			JSONObject ret = new JSONObject();
//			ret.put("returnCode", "9999");
//			ret.put("returnInfo", e.getLocalizedMessage());
//			return ret;
//		}
//	}
//	
//	
//	
//	/**
//	 * 国光微信网关调用
//	 * 透传
//	 * @param params
//	 * @param context
//	 * @return
//	 * @throws Exception
//	 */
//	public static JSONObject wxJSSDK(JSONObject params, ActionContext context) throws Exception {
//		String tradeJson = params.getString("tradeJson");
//		
//		// 加入签名
//		Map tMap = (Map)Json.fromJson(tradeJson);
//		Map tradeParamMp = (Map) tMap.get("tradeParam"); // 取出tradeParam
//		String sign = MD5.YanSu_MD5_Sign(tradeParamMp);
//		tMap.put("sign", sign);
//		
//		String wxGateWayUrl = (String) tMap.get("WxGateWay"); // 动态知道访问地址
//		if("".equals(wxGateWayUrl) || wxGateWayUrl==null) wxGateWayUrl = HisConfig.WxGateWayUrl;
//		tMap.remove("WxGateWay");
//		
//		// 重新组报文
//		tradeJson = Json.toJson(tMap);
//		try {
//			HisConfig.Log_Wx.info("国光微信网关请求:\r\n" + tradeJson);
//			String responseContent = httpPostWithoutParam(tradeJson, wxGateWayUrl, HisConfig.WxGateWayTimeout);
//			HisConfig.Log_Wx.info("国光微信网关返回：\r\n" + responseContent);
//			
//			JSONObject ret = JSONObject.parseObject(responseContent);
//			return ret;
//		} catch (Exception e) {
//			// TODO: handle exception
//			JSONObject ret = new JSONObject();
//			ret.put("returnCode", "9999");
//			ret.put("returnInfo", e.getLocalizedMessage());
//			return ret;
//		}
//		
//		
//	}
//
//	/**
//	 * 提交国光支付宝网关交易信息
//	 * 让国光支付宝网关存入内存，等收到支付宝异步请求后执行His交易
//	 * @param params
//	 * @param context
//	 * @return
//	 * @throws Exception
//	 */
//	public static JSONObject commitTradeParam(JSONObject params, ActionContext context) throws Exception {
//		String tradeJson = params.getString("tradeJson");
//		
//		Map map = new HashMap();
//		map.put("sign", MD5.MD5Encode(tradeJson+""+HisConfig.HIS_MD5KEY));
//		map.put("tradeInfo", tradeJson);
//
//		HisConfig.Log_Ali.info("国光阿里网关请求：\r\n " + Json.toJson(map));
//		String r = Http.post(HisConfig.AliGateWayUrl, map, HisConfig.AliGateWayTimeout);
//		HisConfig.Log_Ali.info("国光阿里网关返回：\r\n " + r);
//		JSONObject ret = JSONObject.parseObject(r);
//		return ret;
//	}
//	
//	/**
//	 * http获取网络上的资源, 静态文件
//	 * @param params
//	 * @param context
//	 * @return
//	 * @throws SQLException
//	 * @throws NamingException
//	 * @throws ClientProtocolException
//	 * @throws IOException
//	 */
//	public static JSONObject jsonp(JSONObject params, ActionContext context) throws SQLException, NamingException, ClientProtocolException, IOException {
//		String tradeJson = params.getString("tradeJson");
//		Map tMap = (Map)Json.fromJson(tradeJson);
//		
//		String type = (String)tMap.get("type");
//		String encode = (String)tMap.get("encoding");
//		String url = (String)tMap.get("url");
//		try {
//			// json & txt 	file
//			if("json".equals(type) || "txt".equals(type)){
//				
//				HisConfig.Log_His.info("获取文本文件资源请求:\r\n" + tradeJson);
//				String out = "";
//				
//				Request req = Request.create(url, METHOD.POST);
//				Response rsp = Sender.create(req).setTimeout(HisConfig.AppGateWayTimeout).send();
//				
//				// 编码格式
//				if(null==encode) {
//					out = rsp.getContent(Encoding.GBK);
//				}
//				else {
//					out = rsp.getContent(encode);
//				}
//				HisConfig.Log_His.info("获取文件资源返回:\r\n" + out);				
//				if("".equals(out)) throw new Exception("返回数据为空字符串");
//				
//				if("txt".equals(type)){ // txt文件直接放入 httpServletResponse对象中？ 非json数据无法解析为原生json，因此放入httpservletresponse
//					HttpServletResponse response = (HttpServletResponse)context.get(ActionContext.RESPONSE);
//					response.setCharacterEncoding(Encoding.UTF8);
//					response.getWriter().write(out);
//					return null;
//				}
//				JSONObject ret = JSONObject.parseObject(out);
//				return ret;
//				
//			}else if("image".equals(type)){ // image 	FILE
//				HttpServletResponse response = (HttpServletResponse)context.get(ActionContext.RESPONSE);
//				
//				Request req = Request.create(url, METHOD.POST);
//				Response rsp = Sender.create(req).setTimeout(HisConfig.AppGateWayTimeout).send();
//				
//				final int BUFFER_SIZE = 32768 * 8; 
//				InputStream ins = rsp.getStream();	// 返回体
//				OutputStream os = response.getOutputStream();	//HttpServletResponse的输出流
//				
//		        try {
//					Streams.write(os, ins, BUFFER_SIZE);
//				} catch (Exception e) {
//					throw Lang.wrapThrow(e);
//				}finally{
//					Streams.safeClose(os);
//					Streams.safeClose(ins);
//				}
//		        
//			}
//			return null;
//			
//		} catch (Exception e) {
//			// TODO: handle exception
//			JSONObject ret = new JSONObject();
//			ret.put("returnCode", "9999");
//			ret.put("returnInfo", e.getLocalizedMessage());
//			return ret;
//		}
//	}
//	
//	
//	/**
//	 * 连接后台服务
//	 * @param params
//	 * @param context
//	 * @return
//	 * @throws SQLException
//	 * @throws NamingException
//	 * @throws ClientProtocolException
//	 * @throws IOException
//	 */
//	public static JSONObject wxEbmsServiceApi(JSONObject params, ActionContext context) throws SQLException, NamingException, ClientProtocolException, IOException {
//		String tradeJson = params.getString("tradeJson");
//		// 加入签名
//		Map tMap = (Map) Json.fromJson(tradeJson);
//		Map tradeParamMap = (Map)tMap.get("tradeParam");
//		String tradeParamsStr = Json.toJson(tradeParamMap, JsonFormat.compact());
//		System.out.println(tradeParamsStr);
//		String sign = MD5.MD5Encode(tradeParamsStr+""+HisConfig.WxEbms_MD5KEY);
//		tMap.put("sign", sign);
//
//		// 重新组报文
//		tradeJson = Json.toJson(tMap);
//		try {
//			HisConfig.Log_WxEbms.info("WxEbms网关请求:\r\n" + tradeJson);
//			String retStr =  httpPostWithoutParam(tradeJson, HisConfig.WxEbmsGateWayUrl, HisConfig.WxEbmsGateWayTimeout);
//			HisConfig.Log_WxEbms.info("WxEbms网关返回:\r\n" + retStr);
//			if("".equals(retStr)) throw new Exception("返回数据为空字符串");
//			
//			JSONObject ret = JSONObject.parseObject(retStr);
//			return ret;
//		} catch (Exception e) {
//			// TODO: handle exception
//			JSONObject ret = new JSONObject();
//			ret.put("returnCode", "9999");
//			ret.put("returnInfo", e.getLocalizedMessage());
//			return ret;
//		}
//	}
//	
//	
//	/**
//	 * http获取网络上的资源
//	 * @param params
//	 * @param context
//	 * @return
//	 * @throws SQLException
//	 * @throws NamingException
//	 * @throws ClientProtocolException
//	 * @throws IOException
//	 */
//	public static JSONObject jsonp2Other(JSONObject params, ActionContext context) throws SQLException, NamingException, ClientProtocolException, IOException {
//		String tradeJson = params.getString("tradeJson");
//		Map tMap = (Map)Json.fromJson(tradeJson);
//		
//		String type = (String)tMap.get("type");
//		String encode = (String)tMap.get("encoding");
//		String url = (String)tMap.get("url");
//		try {
//			if("json".equals(type) || "txt".equals(type)){
//				HisConfig.Log_His.info("获取文本文件资源请求:\r\n" + tradeJson);
//				String out = "";
//				Request req = Request.create(url, METHOD.POST);
//				Response rsp = Sender.create(req).setTimeout(HisConfig.AppGateWayTimeout).send();
//				if(null==encode) out = rsp.getContent(Encoding.GBK);
//				else out = rsp.getContent(encode);
//				HisConfig.Log_His.info("获取文件资源返回:\r\n" + out);
//				if("".equals(out)) throw new Exception("返回数据为空字符串");
//				if("txt".equals(type)){
//					HttpServletResponse response = (HttpServletResponse)context.get(ActionContext.RESPONSE);
//					response.setCharacterEncoding(Encoding.UTF8);
//					response.getWriter().write(out);
//					return null;
//				}
//				JSONObject ret = JSONObject.parseObject(out);
//				return ret;
//			}else if("image".equals(type)){
//				HttpServletResponse response = (HttpServletResponse)context.get(ActionContext.RESPONSE);
//				Request req = Request.create(url, METHOD.POST);
//				Response rsp = Sender.create(req).setTimeout(HisConfig.AppGateWayTimeout).send();
//				final int BUFFER_SIZE = 32768 * 8;
//				InputStream ins = rsp.getStream();
//				OutputStream os = response.getOutputStream();
//		        try {
//					Streams.write(os, ins, BUFFER_SIZE);
//				} catch (Exception e) {
//					throw Lang.wrapThrow(e);
//				}finally{
//					Streams.safeClose(os);
//					Streams.safeClose(ins);
//				}
//			}
//			return null;
//		} catch (Exception e) {
//			// TODO: handle exception
//			JSONObject ret = new JSONObject();
//			ret.put("returnCode", "9999");
//			ret.put("returnInfo", e.getLocalizedMessage());
//			return ret;
//		}
//	}
//
//	
//	
//	/**
//	 * 无需getParameter的Http通讯
//	 * @param tradeJson 交易json
//	 * @return json
//	 * @throws Exception
//	 */
//	private static String httpPostWithoutParam(String tradeJson) throws Exception {
//		// =========================== 请求和返回 =========================== 
//        HttpPost httpPost = new HttpPost(HisConfig.WxGateWayUrl);  // Post请求设置对象
//
//        // 按表单形式发送
//        //List<BasicNameValuePair> formparams = new ArrayList<BasicNameValuePair>();   // 创建参数队列    
//        //formparams.add(new BasicNameValuePair("sendAjaxJson", tradeParam));          // 增加参数实体（多参数的话该行执行多次即可）
//        //UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8"); // 这种是：Content-Type: application/x-www-form-urlencoded; charset=UTF-8
//
//        // 按text文本发送
//        StringEntity entity = new StringEntity(tradeJson, Consts.UTF_8);  // 这种是： Content-Type: text/plain; charset=UTF-8
//        httpPost.setEntity(entity);  // 设置参数实体
//
//        CloseableHttpClient httpclient = HttpClients.createDefault();
//        //设置请求和传输超时时间
//        RequestConfig requestConfig = RequestConfig.custom()
//                .setConnectTimeout(3*1000) // 建立连接的超时 
//                .setSocketTimeout(HisConfig.WxGateWayTimeout)      // 数据接收超时
//                .build();
//        httpPost.setConfig(requestConfig);
//        CloseableHttpResponse response = httpclient.execute(httpPost);
//        String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);  // 结果报文
//		return responseContent;
//	}
//	
//	/**
//	 * 无需getParameter的Http通讯
//	 * @param tradeJson 交易json
//	 * @param url 交易url
//	 * @param timeout 交易超时时间
//	 * @return json
//	 * @throws Exception
//	 */
//	private static String httpPostWithoutParam(String tradeJson, String url, int timeout) throws Exception {
//		// =========================== 请求和返回 =========================== 
//        HttpPost httpPost = new HttpPost(url);  // Post请求设置对象
//
//        // 按表单形式发送
//        //List<BasicNameValuePair> formparams = new ArrayList<BasicNameValuePair>();   // 创建参数队列    
//        //formparams.add(new BasicNameValuePair("sendAjaxJson", tradeParam));          // 增加参数实体（多参数的话该行执行多次即可）
//        //UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8"); // 这种是：Content-Type: application/x-www-form-urlencoded; charset=UTF-8
//
//        // 按text文本发送
//        StringEntity entity = new StringEntity(tradeJson, Consts.UTF_8);  // 这种是： Content-Type: text/plain; charset=UTF-8
//        httpPost.setEntity(entity);  // 设置参数实体
//
//        CloseableHttpClient httpclient = HttpClients.createDefault();
//        //设置请求和传输超时时间
//        RequestConfig requestConfig = RequestConfig.custom()
//                .setConnectTimeout(3*1000) // 建立连接的超时 
//                .setSocketTimeout(timeout)      // 数据接收超时
//                .build();
//        httpPost.setConfig(requestConfig);
//        CloseableHttpResponse response = httpclient.execute(httpPost);
//        String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);  // 结果报文
//		return responseContent;
//	}
//	
}
